// 用户模块
// import { getToken, setToken, removeToken } from '@/utils/auth'
import { userAccountLogin } from '@/api/user'
const user = {
  namespaced: true,
  // 定义数据

  // state:{}
  // state:()=>({})

  // 组件的data选项必须是一个函数？
  // 原因：组件本质为了复用，复用组件的时候要保证内部数据是独立互不影响的
  // 为了保证数据独立 必须是一个函数 每次复用组件都会调用函数 每次调用函数都会
  // 生成一个独一无二的内存空间 各个复用组件的数据就会独立了

  // js底层机制：函数每次调用return出来的对象会生成一块全新的内存 虽然初始值看起来一样 但是互不影响

  // 为什么state:()=>({})？
  // 当函数中只有一个返回值的时候 可以省略return
  // 加括号的目的 仅仅是为了包裹一下表达式 就没有语法错误了
  // 等同于 state:()=>(return {})

  // 总结：写函数return的对象的应用 vue data / state / props : 默认参数 复杂类型 必须是一个工厂函数
  // 都是为了保证复用的时候数据互不影响 底层ja机制是一样的

  state: () => ({
    // token: getToken(), // 先默认给一个空值
    profile: {
      id: '',
      account: '',
      nickname: '',
      avatar: '',
      token: '',
      mobile: ''
    }
  }),
  // 定义修改数据的方法
  mutations: {
    // 更新token
    // setToken (state, payload) {
    //   state.token = payload // 更新token数据
    //   setToken(payload) // 同步到本地缓存
    // },
    // // 退出登录删除token
    // removeToken (state) {
    //   state.token = null
    //   removeToken() // 删除本地缓存token
    // },

    setUser (state, useInfo) {
      state.profile = useInfo
    },
    // 清空数据
    clearProfile (state) {
      state.profile = {}
    }
  },
  // 定义异步方法
  actions: {
    async asyncSetUser (ctx, reqData) {
      const res = await userAccountLogin(reqData)
      ctx.commit('setUser', res.data.result)
    }
  },
  // 基于state的计算属性
  getters: {}
}

// 导出
export default user
